/**
 * 给定两个01字符串S和T，每一次可以将S的一对相邻元素取反
 * 问将S变为T的方案。不能的话输出-1
 * 显然贪心枚举即可。依次对每一个位置相同就不变，不同就变。
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using pii = pair<int, int>;
using vpii = vector<pii>;
using vi = vector<int>;
using vll = vector<llt>;

template<typename T>
void input(vector<T>&v, int n){
    v.assign(n + 1, {});
    for(int i=1;i<=n;++i) cin >> v[i];
}

template<typename T>
istream & operator >> (istream & is, vector<T> & v){
    for(auto & i : v) is >> i;
    return is;
}

llt const INF = 0x1F2F3F4F5F6F7F8F;
llt const NINF = -INF;
llt const MOD = 998244353LL;

int N;
string S, T;
vpii Ans;

void work(){
    cin >> N >> S >> T;
    for(int i=0;i<N-1;++i){
        if(S[i] != T[i]){
            Ans.emplace_back(i, i + 1);
            S[i] = T[i];
            S[i + 1] ^= '0' ^ '1';
        }
    }
    if(S[N - 1] != T[N - 1]) return (void)(cout << "-1\n");
    cout << Ans.size() << endl;
    for(const auto & p : Ans) cout << p.first + 1 << " " << p.second + 1 << "\n";
    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase; 
    while(nofkase--) work();    
    return 0;
}
